home *** CD-ROM | disk | FTP | other *** search
/ Aminet 21 / Aminet 21 (1997)(GTI - Schatztruhe)[!][Oct 1997].iso / Aminet / dev / misc / gms_dev.lha / GMS / Source / Asm / Demos / BigBobs.s < prev    next >
Encoding:
Text File  |  1997-07-08  |  8.2 KB  |  366 lines

  1. ;-------T-------T------------------------T----------------------------------;
  2. ;Name:      Big Bouncing Bobs
  3. ;Author:    Paul Manias
  4. ;Copyright: DreamWorld Productions (c) 1996-1997.  Freely distributable.
  5.  
  6.     INCDIR    "INCLUDES:"
  7.     INCLUDE    "games/games_lib.i"
  8.     INCLUDE    "games/games.i"
  9.  
  10. MAX_IMAGES =    20
  11.  
  12.     SECTION    "Demo",CODE
  13.  
  14. ;===========================================================================;
  15. ;                             INITIALISE DEMO
  16. ;===========================================================================;
  17.  
  18.     STARTGMS
  19.  
  20. Start:    MOVEM.L    A0-A6/D1-D7,-(SP)
  21.     move.l    GMSBase(pc),a6
  22.     CALL    AllocBlitter
  23.     tst.l    d0
  24.     bne    .Error_Blitter
  25.  
  26.     lea    PIC_BobTags(pc),a1
  27.     CALL    LoadPic
  28.     tst.l    d0
  29.     beq    .Error_Picture
  30.  
  31.     move.l    PIC_Bobs(pc),a1
  32.     move.w    PIC_Planes(a1),GSPlanes+2
  33.     move.l    PIC_Palette(a1),GSPalette
  34.  
  35.     lea    ScreenTags(pc),a0
  36.     CALL    AddScreen
  37.     tst.l    d0
  38.     beq.s    .Error_Screen
  39.  
  40.     move.l    Screen(pc),a0    ;a0 = GameScreen
  41.     moveq    #MAX_IMAGES,d1    ;d1 = Maximum amount of images.
  42.     CALL    InitRestore
  43.     tst.l    d0
  44.     beq.s    .Error_Restorelist
  45.  
  46.     move.l    Screen(pc),a0
  47.     lea    TAGS_Ball(pc),a1    ;Initialise the Ball mbob.
  48.     CALL    InitBob
  49.     tst.l    d0
  50.     beq.s    .Error_Ball
  51.  
  52.     move.l    Screen(pc),a0
  53.     lea    TAGS_Interlaced(pc),a1    ;Initialise "HiRes Interlaced" bob.
  54.     CALL    InitBob
  55.     tst.l    d0
  56.     beq.s    .Error_Laced
  57.  
  58.     move.l    Screen(pc),a0
  59.     CALL    ShowScreen
  60.  
  61.     CALL    InitJoyPorts
  62.  
  63.     bsr.s    Main
  64.  
  65. .ReturnToDOS
  66.     move.l    GMSBase(pc),a6
  67.     move.l    BOB_Interlaced(pc),a1
  68.     CALL    FreeBob
  69. .Error_Laced
  70.     move.l    MBOB_Ball(pc),a1
  71.     CALL    FreeBob
  72. .Error_Ball
  73.     move.l    Screen(pc),d0
  74.     CALL    FreeRestore
  75. .Error_Restorelist
  76.     lea    ScreenTags(pc),a0
  77.     CALL    DeleteScreen
  78. .Error_Screen
  79.     move.l    PIC_Bobs(pc),a1
  80.     CALL    FreePic
  81. .Error_Picture
  82.     CALL    FreeBlitter
  83. .Error_Blitter
  84.     MOVEM.L    (SP)+,A0-A6/D1-D7
  85.     moveq    #ERR_OK,d0
  86.     rts
  87.  
  88. ;===========================================================================;
  89. ;                                DEMO CODE
  90. ;===========================================================================;
  91.  
  92. Main:    move.l    GMSBase(pc),a6    ;a6 = GMSBase.
  93.     move.l    Screen(pc),a2    ;a2 = GameScreen.
  94.     move.l    GS_Bitmap(a2),a0    ;a0 = Bitmap.
  95.  
  96.     move.l    BOB_Interlaced(pc),a1    ;a1 = Bob to draw.
  97.     move.w    GS_ScrWidth(a2),d0
  98.     sub.w    BOB_Width(a1),d0
  99.     move.w    d0,BOB_XCoord(a1)
  100.  
  101.     move.l    GS_MemPtr2(a2),BMP_Data(a0)
  102.     CALL    DrawBob    ;>> = Draw the Bob
  103.  
  104.     move.l    GS_MemPtr1(a2),BMP_Data(a0)
  105.     CALL    DrawBob    ;>> = Draw the Bob
  106.  
  107.     moveq    #$00,d7
  108.     move.l    MBOB_Ball(pc),a1
  109.     move.l    MB_EntryList(a1),a2    ;a2 = First entry.
  110.     move.w    MB_AmtEntries(a1),d2    ;a2 = Amount of entries.
  111.     subq.w    #1,d2    ;d2 = --1 for loop.
  112.     moveq    #$00,d3
  113.  
  114. .create    eor.w    #1,d3
  115.     moveq    #8,d1    ;Set Y speed here.
  116.     CALL    FastRandom
  117.     addq.w    #2,d0
  118.     move.w    d0,BE_YSpeed(a2)
  119.     move.w    #8,d1    ;Set X speed here.
  120.     CALL    FastRandom
  121.     addq.w    #1,d0
  122.     move.w    d0,BE_XSpeed(a2)
  123.     tst.w    d3
  124.     beq.s    .posx
  125.     neg.w    BE_XSpeed(a2)
  126.  
  127. .posx    move.l    Screen(pc),a0
  128.     move.w    GS_ScrHeight(a0),d1    ;Starting Y coordinate.
  129.     asr.w    #1,d1
  130.     CALL    FastRandom
  131.     asr.w    #1,d1
  132.     add.w    d1,d0
  133.     move.w    d0,BE_YCoord(a2)
  134.  
  135.     move.w    GS_ScrWidth(a0),d1    ;Starting X coordinate.
  136.     CALL    FastRandom
  137.     move.w    d0,BE_XCoord(a2)
  138.  
  139.     moveq    #12,d1
  140.     CALL    FastRandom
  141.     move.w    d0,BE_Frame(a2)
  142.     move.b    .Sets(pc,d0.w),BE_Set+1(a2)
  143.     move.w    #1,BE_FChange(a2)
  144.     move.w    d3,BE_Locked(a2)
  145.  
  146.     lea    NBE_SIZEOF(a2),a2
  147.     dbra    d2,.create
  148.     bra.s    Loop
  149.  
  150. .Sets    dc.b    0,0,0,0
  151.     dc.b    1,1,1,1
  152.     dc.b    2,2,2,2
  153.  
  154. ;---------------------------------------------------------------------------;
  155.  
  156. Loop:    addq.w    #1,d7
  157.     move.l    MB_EntryList(a1),a2    ;a2 = First entry.
  158.     move.w    MB_AmtEntries(a1),d2
  159.     subq.w    #1,d2
  160. .update    bsr.s    UpdateBob
  161.     lea    NBE_SIZEOF(a2),a2
  162.     dbra    d2,.update
  163.  
  164.     move.l    Screen(pc),a0
  165.     move.l    GS_Bitmap(a0),a0
  166.     CALL    Restore
  167.  
  168.     move.l    Screen(pc),a0    ;a0 = GameScreen.
  169.     move.l    GS_Bitmap(a0),a0    ;a0 = Bitmap.
  170.     move.l    a1,a2    ;a2 = Restorelist.
  171.     move.l    MBOB_Ball(pc),a1    ;a1 = Bob to draw.
  172.     CALL    DrawBob    ;>> = Draw the Bob.
  173.  
  174.     CALL    WaitVBL    ;>> = Wait for VBL.
  175.  
  176.     move.l    Screen(pc),a0    ;a0 = GameScreen.
  177.     CALL    SwapBuffers    ;>> = Swap the buffers.
  178.  
  179.     moveq    #JPORT1,d0    ;d0 = JoyPort2
  180.     moveq    #JT_ZBXY,d1    ;d1 = Bit switch type.
  181.     CALL    ReadJoyPort    ;>> = Go get port status.
  182.     btst    #MB_LMB,d0    ;d0 = LMB pressed?
  183.     beq.s    Loop    ;>> = No.
  184.     rts
  185.  
  186. ;===========================================================================;
  187. ;                               UPDATE A BOB
  188. ;===========================================================================;
  189. ;Function: Moves the entity according to its internal settings.
  190. ;Requires: a1 = Bob structure.
  191. ;       a2 = Entry to update.
  192.  
  193. GRAVITY =    1
  194.  
  195. UpdateBob:
  196.     move.l    MB_Screen(a1),a0    ;a0 = Bitmap
  197.     move.w    BE_YCoord(a2),d0    ;d0 = YCoord
  198.     add.w    BE_YSpeed(a2),d0    ;d0 = (YCoord)+YSpeed
  199.     cmp.w    GS_ScrHeight(a0),d0    ;d0 = Should this bob bounce?
  200.     blt.s    .NoBounce    ;>> = No.
  201.     neg.w    BE_YSpeed(a2)    ;a2 = Bounce the bob!
  202.     addq.w    #GRAVITY,BE_YSpeed(a2)    ;a2 = Gravity pushes the bob down.
  203.     bra.s    .CheckX
  204. .NoBounce
  205.     move.w    d0,BE_YCoord(a2)    ;d0 = Save the change.
  206.     addq.w    #GRAVITY,BE_YSpeed(a2)    ;a2 = Gravity pushes the bob down.
  207.  
  208. .CheckX    move.w    BE_XCoord(a2),d0
  209.     add.w    BE_XSpeed(a2),d0
  210.     cmp.w    GS_ScrWidth(a0),d0
  211.     bcs.s    .NoXBounce
  212.     neg.w    BE_XSpeed(a2)
  213.     bra.s    .Animate
  214. .NoXBounce
  215.     move.w    d0,BE_XCoord(a2)
  216.  
  217. ;---------------------------------------------------------------------------;
  218.  
  219. .Animate
  220.     tst.w    BE_Locked(a2)
  221.     beq.s    .exit
  222.     move.w    d7,d6
  223.     and.w    #%00000011,d6
  224.     bne.s    .exit
  225.     move.w    BE_FChange(a2),d1
  226.     bgt.s    .Positive
  227.  
  228. .Negative
  229.     cmp.w    #1,BE_Set(a2)
  230.     bgt.s    .NBlue
  231.     beq.s    .NGreen
  232. .NRed    add.w    d1,BE_Frame(a2)
  233.     tst    BE_Frame(a2)
  234.     bge.s    .exit
  235.     move.w    #1,BE_FChange(a2)
  236.     clr.w    BE_Frame(a2)
  237.     rts
  238. .NGreen    add.w    d1,BE_Frame(a2)
  239.     cmp.w    #4,BE_Frame(a2)
  240.     bge.s    .done
  241.     move.w    #1,BE_FChange(a2)
  242.     move.w    #4,BE_Frame(a2)
  243.     rts
  244. .NBlue    add.w    d1,BE_Frame(a2)
  245.     cmp.w    #8,BE_Frame(a2)
  246.     bge.s    .done
  247.     move.w    #1,BE_FChange(a2)
  248.     move.w    #8,BE_Frame(a2)
  249. .exit    rts
  250.  
  251. .Positive
  252.     cmp.w    #1,BE_Set(a2)
  253.     bgt.s    .PBlue
  254.     beq.s    .PGreen
  255. .PRed    add.w    d1,BE_Frame(a2)
  256.     cmp.w    #3,BE_Frame(a2)
  257.     ble.s    .done
  258.     move.w    #-1,BE_FChange(a2)
  259.     move.w    #2,BE_Frame(a2)
  260.     rts
  261. .PGreen    add.w    d1,BE_Frame(a2)
  262.     cmp.w    #7,BE_Frame(a2)
  263.     ble.s    .done
  264.     move.w    #-1,BE_FChange(a2)
  265.     move.w    #6,BE_Frame(a2)
  266.     rts
  267. .PBlue    add.w    d1,BE_Frame(a2)
  268.     cmp.w    #11,BE_Frame(a2)
  269.     ble.s    .done
  270.     move.w    #-1,BE_FChange(a2)
  271.     move.w    #10,BE_Frame(a2)
  272. .done    rts
  273.  
  274. ;===========================================================================;
  275. ;                                  DATA
  276. ;===========================================================================;
  277.  
  278.   STRUCTURE    NBE,BE_SIZEOF    ;Definition for the mutated Entry-
  279.     WORD    BE_XSpeed    ;list in the Ball bob.
  280.     WORD    BE_YSpeed
  281.     WORD    BE_Set    ;0 = Red, 1 = Green, 2 = Blue.
  282.     WORD    BE_FChange
  283.     WORD    BE_Locked
  284.     LABEL    NBE_SIZEOF
  285.  
  286. ScreenTags:    dc.l  TAGS_GAMESCREEN
  287. Screen:        dc.l  0
  288.         dc.l  GSA_Rasterlist,Rasterlist
  289.         dc.l  GSA_ScrWidth,640
  290.         dc.l  GSA_ScrHeight,512
  291.         dc.l  GSA_Attrib,DBLBUFFER
  292.         dc.l  GSA_ScrMode,HIRES|LACED
  293.         dc.l  GSA_Planes
  294. GSPlanes:    dc.l  0
  295.         dc.l  GSA_Palette
  296. GSPalette:    dc.l  0
  297.         dc.l  TAGEND
  298.  
  299. Rasterlist:    COLOURLIST  300,30,00,.colours ;Line, Skip, Colnum, Colours.
  300.         RASTEND
  301. .colours    dc.l  $100000,$200000,$300000,$400000,$500000,$600000,$700000
  302.         dc.l  -1
  303.  
  304. ;---------------------------------------------------------------------------;
  305.  
  306. PIC_BobTags:    dc.l  TAGS_PICTURE
  307. PIC_Bobs:    dc.l  0
  308.  
  309.         dc.l  PCA_Width,96*2
  310.         dc.l  PCA_Height,71*2
  311.  
  312.         dc.l  PCA_Options,VIDEOMEM|GETPALETTE|RESIZE
  313.         dc.l  PCA_File,.file
  314.         dc.l  TAGEND
  315. .file        dc.b  "GMS:demos/data/PIC.HRPulse",0
  316.         even
  317.  
  318. ;---------------------------------------------------------------------------;
  319.  
  320. TAGS_Ball:    dc.l  TAGS_MBOB
  321. MBOB_Ball:    dc.l  0
  322.         dc.l  MBA_AmtEntries,MAX_IMAGES
  323.         dc.l  MBA_GfxCoords,.frames
  324.         dc.l  MBA_Width,32
  325.         dc.l  MBA_Height,32
  326.         dc.l  MBA_EntryList,Images
  327.         dc.l  MBA_Attrib,GENMASKS|CLRNOMASK|CLEAR|CLIP
  328.         dc.l  MBA_PictureTags,PIC_BobTags
  329.         dc.l  MBA_EntrySize,NBE_SIZEOF
  330.         dc.l  TAGEND
  331.  
  332. .frames        dc.w  00,32*0    ;RED
  333.         dc.w  00,32*1
  334.         dc.w  00,32*2
  335.         dc.w  00,32*3
  336.         dc.w  32,32*0    ;GREEN
  337.         dc.w  32,32*1
  338.         dc.w  32,32*2
  339.         dc.w  32,32*3
  340.         dc.w  64,32*0    ;BLUE
  341.         dc.w  64,32*1
  342.         dc.w  64,32*2
  343.         dc.w  64,32*3
  344.         dc.l  -1
  345.  
  346. ;---------------------------------------------------------------------------;
  347.  
  348. TAGS_Interlaced    dc.l  TAGS_BOB
  349. BOB_Interlaced:    dc.l  0
  350.         dc.l  BBA_GfxCoords,.frames
  351.         dc.l  BBA_Width,96*2
  352.         dc.l  BBA_Height,7*2
  353.         dc.l  BBA_Attrib,GENMASKS
  354.         dc.l  BBA_PictureTags,PIC_BobTags
  355.         dc.l  TAGEND
  356.  
  357. .frames        dc.w  0,16*4*2    ;X/Y Graphic
  358.         dc.l  -1
  359.  
  360. ;---------------------------------------------------------------------------;
  361.  
  362.     SECTION    Images,BSS
  363.  
  364. Images    ds.b    NBE_SIZEOF*MAX_IMAGES    ;X/Y/Frame/Speed/Set/FChange/Locked
  365.  
  366.